<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Strict//EN"><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-us">
<title>Coppelia Kinematics Routines, API</title>
<link rel="stylesheet" type="text/css" href="../../helpFiles/style.css">
<script type="text/javascript">
//
function getParameterByName(name, url = window.location.href)
{
    name = name.replace(/[\[\]]/g, '\\$&');
    var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
        results = regex.exec(url);
    if(!results) return null;
    if(!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, ' '));
}
//
                </script><style type="text/css">
td.section { margin: 0; padding: 0; }
                </style></head>
<body>
<div align="center"><table class="allEncompassingTable">

<tr><td id="title" class="section"><h1>Coppelia Kinematics Routines, API reference</h1></td></tr>
<tr><td id="info" class="section"><p class="infoBox">All units, unless otherwise indicated, are specified in meters and radians.</p></td></tr>

<tr><td id="alphabetical" class="section"><pre class="lightGreyBox">
<a href="?#ikAddIkElement">ikAddIkElement</a>
<a href="?#ikComputeJacobian">ikComputeJacobian</a>
<a href="?#ikCreateEnvironment">ikCreateEnvironment</a>
<a href="?#ikCreateDummy">ikCreateDummy</a>
<a href="?#ikCreateIkGroup">ikCreateIkGroup</a>
<a href="?#ikCreateJoint">ikCreateJoint</a>
<a href="?#ikDoesObjectExist">ikDoesObjectExist</a>
<a href="?#ikDoesIkGroupExist">ikDoesIkGroupExist</a>
<a href="?#ikDuplicateEnvironment">ikDuplicateEnvironment</a>
<a href="?#ikEraseEnvironment">ikEraseEnvironment</a>
<a href="?#ikEraseObject">ikEraseObject</a>
<a href="?#ikGetConfigForTipPose">ikGetConfigForTipPose</a>
<a href="?#ikGetIkElementBase">ikGetIkElementBase</a>
<a href="?#ikGetIkElementConstraints">ikGetIkElementConstraints</a>
<a href="?#ikGetIkElementFlags">ikGetIkElementFlags</a>
<a href="?#ikGetIkElementPrecision">ikGetIkElementPrecision</a>
<a href="?#ikGetIkElementWeights">ikGetIkElementWeights</a>
<a href="?#ikGetIkGroupCalculation">ikGetIkGroupCalculation</a>
<a href="?#ikGetIkGroupFlags">ikGetIkGroupFlags</a>
<a href="?#ikGetIkGroupHandle">ikGetIkGroupHandle</a>
<a href="?#ikGetJacobian">ikGetJacobian</a>
<a href="?#ikGetJointDependency">ikGetJointDependency</a>
<a href="?#ikGetJointIkWeight">ikGetJointIkWeight</a>
<a href="?#ikGetJointInterval">ikGetJointInterval</a>
<a href="?#ikGetJointMatrix">ikGetJointMatrix</a>
<a href="?#ikGetJointMaxStepSize">ikGetJointMaxStepSize</a>
<a href="?#ikGetJointMode">ikGetJointMode</a>
<a href="?#ikGetJointPosition">ikGetJointPosition</a>
<a href="?#ikGetJointScrewPitch">ikGetJointScrewPitch</a>
<a href="?#ikGetJointTransformation">ikGetJointTransformation</a>
<a href="?#ikGetJointType">ikGetJointType</a>
<a href="?#ikGetLastError">ikGetLastError</a>
<a href="?#ikGetLinkedDummy">ikGetLinkedDummy</a>
<a href="?#ikGetManipulability">ikGetManipulability</a>
<a href="?#ikGetObjectHandle">ikGetObjectHandle</a>
<a href="?#ikGetObjectMatrix">ikGetObjectMatrix</a>
<a href="?#ikGetObjectParent">ikGetObjectParent</a>
<a href="?#ikGetObjects">ikGetObjects</a>
<a href="?#ikGetObjectTransformation">ikGetObjectTransformation</a>
<a href="?#ikHandleIkGroup">ikHandleIkGroup</a>
<a href="?#ikLoad">ikLoad</a>
<a href="?#ikReleaseBuffer">ikReleaseBuffer</a>
<a href="?#ikSave">ikSave</a>
<a href="?#ikSetIkElementBase">ikSetIkElementBase</a>
<a href="?#ikSetIkElementConstraints">ikSetIkElementConstraints</a>
<a href="?#ikSetIkElementFlags">ikSetIkElementFlags</a>
<a href="?#ikSetIkElementPrecision">ikSetIkElementPrecision</a>
<a href="?#ikSetIkElementWeights">ikSetIkElementWeights</a>
<a href="?#ikSetIkGroupCalculation">ikSetIkGroupCalculation</a>
<a href="?#ikSetIkGroupFlags">ikSetIkGroupFlags</a>
<a href="?#ikSetJointDependency">ikSetJointDependency</a>
<a href="?#ikSetJointIkWeight">ikSetJointIkWeight</a>
<a href="?#ikSetJointInterval">ikSetJointInterval</a>
<a href="?#ikSetJointMaxStepSize">ikSetJointMaxStepSize</a>
<a href="?#ikSetJointMode">ikSetJointMode</a>
<a href="?#ikSetJointPosition">ikSetJointPosition</a>
<a href="?#ikSetJointScrewPitch">ikSetJointScrewPitch</a>
<a href="?#ikSetLinkedDummy">ikSetLinkedDummy</a>
<a href="?#ikSetObjectMatrix">ikSetObjectMatrix</a>
<a href="?#ikSetObjectParent">ikSetObjectParent</a>
<a href="?#ikSetObjectTransformation">ikSetObjectTransformation</a>
<a href="?#ikSetSphericalJointMatrix">ikSetSphericalJointMatrix</a>
<a href="?#ikSetSphericalJointQuaternion">ikSetSphericalJointQuaternion</a>
<a href="?#ikSwitchEnvironment">ikSwitchEnvironment</a></pre></td></tr>

<tr><td id="category" class="section">

<h3 class=subsectionBar><a name="environment"></a>Environment functions and helpers</h3>
<pre class=lightGreyBox>
<a href="?#ikCreateEnvironment">ikCreateEnvironment</a>
<a href="?#ikEraseEnvironment">ikEraseEnvironment</a>
<a href="?#ikDuplicateEnvironment">ikDuplicateEnvironment</a>
<a href="?#ikSave">ikSave</a>
<a href="?#ikLoad">ikLoad</a>
<a href="?#ikSwitchEnvironment">ikSwitchEnvironment</a>
<a href="?#ikGetLastError">ikGetLastError</a>
<a href="?#ikReleaseBuffer">ikReleaseBuffer</a>
</pre>


<h3 class=subsectionBar><a name="objects"></a>Objects</h3>
<pre class=lightGreyBox>
<a href="?#ikGetObjects">ikGetObjects</a>
<a href="?#ikGetObjectHandle">ikGetObjectHandle</a>
<a href="?#ikDoesObjectExist">ikDoesObjectExist</a>
<a href="?#ikEraseObject">ikEraseObject</a>
<a href="?#ikGetObjectParent">ikGetObjectParent</a>
<a href="?#ikSetObjectParent">ikSetObjectParent</a>
<a href="?#ikGetObjectTransformation">ikGetObjectTransformation</a>
<a href="?#ikSetObjectTransformation">ikSetObjectTransformation</a>
<a href="?#ikGetObjectMatrix">ikGetObjectMatrix</a>
<a href="?#ikSetObjectMatrix">ikSetObjectMatrix</a>
</pre>


<h3 class=subsectionBar><a name="dummies"></a>Dummies</h3>
<pre class=lightGreyBox>
<a href="?#ikCreateDummy">ikCreateDummy</a>
<a href="?#ikEraseObject">ikEraseObject</a>
<a href="?#ikGetLinkedDummy">ikGetLinkedDummy</a>
<a href="?#ikSetLinkedDummy">ikSetLinkedDummy</a>
</pre>


<h3 class=subsectionBar><a name="joints"></a>Joints</h3>
<pre class=lightGreyBox>
<a href="?#ikCreateJoint">ikCreateJoint</a>
<a href="?#ikEraseObject">ikEraseObject</a>
<a href="?#ikGetJointPosition">ikGetJointPosition</a>
<a href="?#ikSetJointPosition">ikSetJointPosition</a>
<a href="?#ikGetJointMode">ikGetJointMode</a>
<a href="?#ikSetJointMode">ikSetJointMode</a>
<a href="?#ikGetJointInterval">ikGetJointInterval</a>
<a href="?#ikSetJointInterval">ikSetJointInterval</a>
<a href="?#ikGetJointDependency">ikGetJointDependency</a>
<a href="?#ikSetJointDependency">ikSetJointDependency</a>
<a href="?#ikGetJointIkWeight">ikGetJointIkWeight</a>
<a href="?#ikSetJointIkWeight">ikSetJointIkWeight</a>
<a href="?#ikGetJointMaxStepSize">ikGetJointMaxStepSize</a>
<a href="?#ikSetJointMaxStepSize">ikSetJointMaxStepSize</a>
<a href="?#ikGetJointScrewPitch">ikGetJointScrewPitch</a>
<a href="?#ikSetJointScrewPitch">ikSetJointScrewPitch</a>
<a href="?#ikGetJointTransformation">ikGetJointTransformation</a>
<a href="?#ikSetSphericalJointQuaternion">ikSetSphericalJointQuaternion</a>
<a href="?#ikGetJointType">ikGetJointType</a>
<a href="?#ikGetJointMatrix">ikGetJointMatrix</a>
<a href="?#ikSetSphericalJointMatrix">ikSetSphericalJointMatrix</a>
</pre>


<h3 class=subsectionBar><a name="ikGroups"></a>IK groups</h3>
<pre class=lightGreyBox>
<a href="?#ikCreateIkGroup">ikCreateIkGroup</a>
<a href="?#ikGetIkGroupHandle">ikGetIkGroupHandle</a>
<a href="?#ikDoesIkGroupExist">ikDoesIkGroupExist</a>
<a href="?#ikGetIkGroupFlags">ikGetIkGroupFlags</a>
<a href="?#ikSetIkGroupFlags">ikSetIkGroupFlags</a>
<a href="?#ikGetIkGroupCalculation">ikGetIkGroupCalculation</a>
<a href="?#ikSetIkGroupCalculation">ikSetIkGroupCalculation</a>
</pre>


<h3 class=subsectionBar><a name="ikElements"></a>IK elements</h3>
<pre class=lightGreyBox>
<a href="?#ikAddIkElement">ikAddIkElement</a>
<a href="?#ikGetIkElementFlags">ikGetIkElementFlags</a>
<a href="?#ikSetIkElementFlags">ikSetIkElementFlags</a>
<a href="?#ikGetIkElementConstraints">ikGetIkElementConstraints</a>
<a href="?#ikSetIkElementConstraints">ikSetIkElementConstraints</a>
<a href="?#ikGetIkElementBase">ikGetIkElementBase</a>
<a href="?#ikSetIkElementBase">ikSetIkElementBase</a>
<a href="?#ikGetIkElementPrecision">ikGetIkElementPrecision</a>
<a href="?#ikSetIkElementPrecision">ikSetIkElementPrecision</a>
<a href="?#ikGetIkElementWeights">ikGetIkElementWeights</a>
<a href="?#ikSetIkElementWeights">ikSetIkElementWeights</a>
</pre>


<h3 class=subsectionBar><a name="ikCalculation"></a>IK calculation</h3>
<pre class=lightGreyBox>
<a href="?#ikHandleIkGroup">ikHandleIkGroup</a>
<a href="?#ikGetConfigForTipPose">ikGetConfigForTipPose</a>
<a href="?#ikComputeJacobian">ikComputeJacobian</a>
<a href="?#ikGetJacobian">ikGetJacobian</a>
<a href="?#ikGetManipulability">ikGetManipulability</a>
</pre>
</td></tr>

<tr><td id="commands" class="section">
<h3 class="subsectionBar">
<a name="ikAddIkElement" id="ikAddIkElement"></a>ikAddIkElement</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Adds a new IK element to an IK group.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikAddIkElement(int ikGroupHandle,int tipHandle,int* ikElementHandle)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>tipHandle</strong>: the handle of the dummy object that should act as the tip in the IK element.</div>
<div><strong>ikElementHandle</strong>: the IK element handle in the IK group, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikComputeJacobian" id="ikComputeJacobian"></a>ikComputeJacobian</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Computes the Jacobian for an IK group.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikComputeJacobian(int ikGroupHandle,int options,bool* success=nullptr)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>options</strong>: options flag, bit-coded. bit0 set (i.e. 1): takes joint weights into account.</div>
<div><strong>success</strong>: whether the Jacobian could successfully be computed, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetJacobian">ikGetJacobian</a>, <a href="#ikGetManipulability">ikGetManipulability</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikCreateEnvironment" id="ikCreateEnvironment"></a>ikCreateEnvironment</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Creates an new IK environment, and switches to it.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikCreateEnvironment(int* environmentHandle=nullptr,bool protectedEnvironment=false)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>environmentHandle</strong>: the handle of the newly created environment.</div>
<div><strong>protectedEnvironment</strong>: set to false.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikEraseEnvironment">ikEraseEnvironment</a>, <a href="#ikSwitchEnvironment">ikSwitchEnvironment</a>, <a href="#ikDuplicateEnvironment">ikDuplicateEnvironment</a>, <a href="#ikLoad">ikLoad</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikCreateDummy" id="ikCreateDummy"></a>ikCreateDummy</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Creates a dummy object.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikCreateDummy(const char* dummyName/*=nullptr*/,int* dummyHandle)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>dummyName</strong>: the name of the dummy.</div>
<div><strong>dummyHandle</strong>: the handle of the dummy, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikDoesObjectExist">ikDoesObjectExist</a>, <a href="#ikCreateJoint">ikCreateJoint</a>, <a href="#ikEraseObject">ikEraseObject</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikCreateIkGroup" id="ikCreateIkGroup"></a>ikCreateIkGroup</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Creates an IK group.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikCreateIkGroup(const char* ikGroupName/*=nullptr*/,int* ikGroupHandle)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupName</strong>: the name of the IK group.</div>
<div><strong>ikGroupHandle</strong>: the handle of the IK group, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikDoesIkGroupExist">ikDoesIkGroupExist</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikCreateJoint" id="ikCreateJoint"></a>ikCreateJoint</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Creates a joint object.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikCreateJoint(const char* jointName/*=nullptr*/,int jointType,int* jointHandle)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointName</strong>: the name of the joint.</div>
<div><strong>jointType</strong>: the type of the joint. supported types are ik_jointtype_revolute, ik_jointtype_prismatic and ik_jointtype_spherical.</div>
<div><strong>jointHandle</strong>: the handle of the joint, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikDoesObjectExist">ikDoesObjectExist</a>, <a href="#ikCreateJoint">ikCreateDummy</a>, <a href="#ikEraseObject">ikEraseObject</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikDoesObjectExist" id="ikDoesObjectExist"></a>ikDoesObjectExist</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Checks whether an object exists, based on its name.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikDoesObjectExist(const char* objectName)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>objectName</strong>: the name of the object.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true if the object exists.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikDoesIkGroupExist" id="ikDoesIkGroupExist"></a>ikDoesIkGroupExist</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Checks whether an IK group exists, based on its name.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikDoesIkGroupExist(const char* ikGroupName)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupName</strong>: the name of the IK group.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true if the IK group exists.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikDuplicateEnvironment" id="ikDuplicateEnvironment"></a>ikDuplicateEnvironment</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Duplicate current IK environment. Can be used to operate on an environment without modifying the original environment</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikDuplicateEnvironment(int* newEnvironmentHandle)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>newEnvironmentHandle</strong>: the handle of the newly created environment.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikEraseEnvironment">ikEraseEnvironment</a>, <a href="#ikSwitchEnvironment">ikSwitchEnvironment</a>, <a href="#ikDuplicateEnvironment">ikDuplicateEnvironment</a>, <a href="#ikCreateEnvironment">ikCreateEnvironment</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikEraseEnvironment" id="ikEraseEnvironment"></a>ikEraseEnvironment</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Erases an IK environment, and switches to another environment, if available.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikEraseEnvironment(int* switchedEnvironmentHandle=nullptr)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>switchedEnvironmentHandle</strong>: the handle of the environment that was switched to, or -1 if there is no environment left.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikCreateEnvironment">ikCreateEnvironment</a>, <a href="#ikSwitchEnvironment">ikSwitchEnvironment</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikEraseObject" id="ikEraseObject"></a>ikEraseObject</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Erases an object.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikEraseObject(int objectHandle)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>objectHandle</strong>: handle of the object.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetObjectHandle">ikGetObjectHandle</a>, <a href="#ikCreateDummy">ikCreateDummy</a>, <a href="#ikCreateJoint">ikCreateJoint</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetConfigForTipPose" id="ikGetConfigForTipPose"></a>ikGetConfigForTipPose</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Searches for a manipulator configuration that matches a given end-effector position/orientation in space. Search is randomized.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">int ikGetConfigForTipPose(int ikGroupHandle,size_t jointCnt,const int* jointHandles,simReal thresholdDist,int maxIterations,simReal* retConfig,const simReal* metric=nullptr,bool(*validationCallback)(simReal*)=nullptr,const int* jointOptions=nullptr,const simReal* lowLimits=nullptr,const simReal* ranges=nullptr)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>jointCnt</strong>: the number of joint handles provided in the jointHandles array.</div>
<div><strong>jointHandles</strong>: an array with jointCnt entries, that specifies the joint handles for the joints we wish to retrieve the values calculated by the IK.</div>
<div><strong>thresholdDist</strong>: a distance indicating when IK should be computed in order to try to bring the tip onto the target: since the search algorithm proceeds by generating random configurations, many of them produce a tip pose that is too far from the target pose to run IK successfully. Choosing a large value will result in slow calculations, choosing a small value might produce a smaller subset of solutions. Distance between two poses is calculated using a metric (see metric argument below).</div>
<div><strong>maxIterations</strong>: the maximum number of iterations before this function returns. Alternatively, one can specify an upper time limit, in milliseconds, after which the function returns with maxIterations=-timeLimitInMs.</div>
<div><strong>retConfig</strong>: an array with jointCnt entries, that will receive the IK calculated joint values, as specified by the jointHandles array.</div>
<div><strong>metric</strong>: an array to 4 values indicating a metric used to compute pose-pose distances: distance=sqrt((dx*metric[0])^2+(dy*metric[1])^2+(dz*metric[2])^2+(angle*metric[3])^2).</div>
<div><strong>validationCallback</strong>: a callback function taking as input argument the proposed joint values (i.e. a configuration), and as return value whether the configuration is valid (e.g. is not colliding).</div>
<div><strong>jointOptions</strong>: a bit-coded value corresponding to each specified joint handle. Bit 0 (i.e. 1) indicates the corresponding joint is dependent of another joint.</div>
<div><strong>lowLimits</strong>: an optional array pointing to different low limit values for each specified joint. This can be useful when you wish to explore a sub-set of the joint's intervals.</div>
<div><strong>ranges</strong>: an optional array pointing to different range values for each specified joint. This can be useful when you wish to explore a sub-set of the joint's intervals. If the range value is 0, then the lowLimit and range values are taken from the joint's properties. If the range value is negative, then the search interval will be centered around the current joint position, with an extent of (-range).</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">-1 in case of an error, 0 if no valid configuration was found, 1 otherwise.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikComputeJacobian">ikComputeJacobian</a>, <a href="#ikGetJacobian">ikGetJacobian</a>, <a href="#ikDuplicateEnvironment">ikDuplicateEnvironment</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetIkElementBase" id="ikGetIkElementBase"></a>ikGetIkElementBase</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the base object of an IK element.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetIkElementBase(int ikGroupHandle,int ikElementHandle,int* baseHandle,int* constraintsBaseHandle)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>ikElementHandle</strong>: the IK element handle, or X, where X=handleOfTipDummy|ik_handleflag_tipdummy (if several IK elements with the same tip dummy exist, then the first encountered will be selected).</div>
<div><strong>baseHandle</strong>: the handle of the base object, in return, or -1 if the world is the base.</div>
<div><strong>constraintsBaseHandle</strong>: the handle of the constraints base object, in return, relative to which the constraints are specified. Returns -1 if the constraints are relative to the base object.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetIkElementBase">ikSetIkElementBase</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetIkElementConstraints" id="ikGetIkElementConstraints"></a>ikGetIkElementConstraints</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the constraints of an IK element.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetIkElementConstraints(int ikGroupHandle,int ikElementHandle,int* constraints)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>ikElementHandle</strong>: the IK element handle, or X, where X=handleOfTipDummy|ik_handleflag_tipdummy (if several IK elements with the same tip dummy exist, then the first encountered will be selected).</div>
<div><strong>constraints</strong>: the constraints, in return. A combination of following is possible: ik_constraint_x, ik_constraint_y, ik_constraint_z, ik_constraint_alpha_beta, ik_constraint_gamma. For convenience we also have ik_constraint_position=ik_constraint_x|ik_constraint_y|ik_constraint_z, ik_constraint_orientation=ik_constraint_alpha_beta|ik_constraint_gamma, and ik_constraint_pose=ik_constraint_position|ik_constraint_orientation.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetIkElementConstraints">ikSetIkElementConstraints</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetIkElementFlags" id="ikGetIkElementFlags"></a>ikGetIkElementFlags</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves various flags of an IK element.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetIkElementFlags(int ikGroupHandle,int ikElementHandle,int* flags)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>ikElementHandle</strong>: the IK element handle, or X, where X=handleOfTipDummy|ik_handleflag_tipdummy (if several IK elements with the same tip dummy exist, then the first encountered will be selected).</div>
<div><strong>flags</strong>: bit-coded flags, in return: bit0 set (1): the enabled state of the ik element.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetIkElementFlags">ikSetIkElementFlags</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetIkElementPrecision" id="ikGetIkElementPrecision"></a>ikGetIkElementPrecision</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the precision settings of an IK element.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetIkElementPrecision(int ikGroupHandle,int ikElementHandle,simReal* linearPrecision,simReal* angularPrecision)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>ikElementHandle</strong>: the IK element handle, or X, where X=handleOfTipDummy|ik_handleflag_tipdummy (if several IK elements with the same tip dummy exist, then the first encountered will be selected).</div>
<div><strong>linearPrecision</strong>: the required linear precision, in return.</div>
<div><strong>angularPrecision</strong>: the required angular precision, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetIkElementPrecision">ikSetIkElementPrecision</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetIkElementWeights" id="ikGetIkElementWeights"></a>ikGetIkElementWeights</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the desired linear and angular resolution weights of an IK element.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetIkElementWeights(int ikGroupHandle,int ikElementHandle,simReal* linearWeight,simReal* angularWeight)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>ikElementHandle</strong>: the IK element handle, or X, where X=handleOfTipDummy|ik_handleflag_tipdummy (if several IK elements with the same tip dummy exist, then the first encountered will be selected).</div>
<div><strong>linearWeight</strong>: the linear resolution weight, in return.</div>
<div><strong>angularWeight</strong>: the angular resolution weight, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetIkElementWeights">ikSetIkElementWeights</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetIkGroupCalculation" id="ikGetIkGroupCalculation"></a>ikGetIkGroupCalculation</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves calculation properties for an IK group.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetIkGroupCalculation(int ikGroupHandle,int* method,simReal* damping,int* maxIterations)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>method</strong>: the resolution method, in return. Possible values are ik_method_pseudo_inverse (features a tiny bit of hard-coded damping), ik_method_undamped_pseudo_inverse, ik_method_damped_least_squares and ik_method_jacobian_transpose.</div>
<div><strong>damping</strong>: the damping, in case the resolution method is ik_method_damped_least_squares, in return.</div>
<div><strong>maxIterations</strong>: the maximum number of iterations, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetIkGroupCalculation">ikSetIkGroupCalculation</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetIkGroupFlags" id="ikGetIkGroupFlags"></a>ikGetIkGroupFlags</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves flags of an IK group.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetIkGroupFlags(int ikGroupHandle,int* flags)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>flags</strong>: the flags of the IK group, in return. bit0 set (i.e. 1)=group is enabled, bit1 set (i.e. 2)=max. step sizes are ignored, bit2 set (i.e. 4)=restore joints if target position not reached, bit3 set (i.e. 8)=restore joints if target orientation not reached.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetIkGroupFlags">ikSetIkGroupFlags</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetIkGroupHandle" id="ikGetIkGroupHandle"></a>ikGetIkGroupHandle</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the handle of an IK group based on its name.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetIkGroupHandle(const char* ikGroupName,int* ikGroupHandle)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupName</strong>: the name of the IK group.</div>
<div><strong>ikGroupHandle</strong>: the returned IK group handle.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikDoesIkGroupExist">ikDoesIkGroupExist</a>, <a href="#ikCreateIkGroup">ikCreateIkGroup</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetJacobian" id="ikGetJacobian"></a>ikGetJacobian</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the Jacobian previously computed via <a href="#ikComputeJacobian">ikComputeJacobian</a>.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">simReal* ikGetJacobian(int ikGroupHandle,size_t* matrixSize)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>matrixSize</strong>: a pointer to two values for the size (row count (i.e. number of DoFs) and column count) of the Jacobian matrix, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">a pointer to the matrix. Use <a href="#ikReleaseBuffer">ikReleaseBuffer</a> to release the memory when done.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikComputeJacobian">ikComputeJacobian</a>, <a href="#ikGetManipulability">ikGetManipulability</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetJointDependency" id="ikGetJointDependency"></a>ikGetJointDependency</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves information about a possible joint dependency.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetJointDependency(int jointHandle,int* dependencyJointHandle,simReal* offset,simReal* mult)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>dependencyJointHandle</strong>: the handle of the dependency joint, in return.</div>
<div><strong>offset</strong>: the offset, in return. We have joint position = dependency joint position * mult + offset.</div>
<div><strong>mult</strong>: the multiplication factor, in return. We have joint position = dependency joint position * mult + offset.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetJointDependency">ikSetJointDependency</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetJointIkWeight" id="ikGetJointIkWeight"></a>ikGetJointIkWeight</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the IK weight of a joint, i.e. the weight it has during IK resolution.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetJointIkWeight(int jointHandle,simReal* ikWeight)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>ikWeight</strong>: the IK weight, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetJointIkWeight">ikSetJointIkWeight</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetJointInterval" id="ikGetJointInterval"></a>ikGetJointInterval</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the joint limits.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetJointInterval(int jointHandle,bool* cyclic,simReal* intervalMinAndRange)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>cyclic</strong>: whether the joint is cyclic (has no limits).</div>
<div><strong>intervalMinAndRange</strong>: a pointer to two values: the joint lower limit, and the joint range (i.e. joint upper limit = joint lower limit + joint range)</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetJointInterval">ikSetJointInterval</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetJointMatrix" id="ikGetJointMatrix"></a>ikGetJointMatrix</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the intrinsic transformation matrix of a joint.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetJointMatrix(int jointHandle,C4X4Matrix* matrix)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>matrix</strong>: the transformation matrix, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetSphericalJointMatrix">ikSetSphericalJointMatrix</a>, <a href="#ikGetJointPosition">ikGetJointPosition</a>, <a href="#ikGetJointTransformation">ikGetJointTransformation</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetJointMaxStepSize" id="ikGetJointMaxStepSize"></a>ikGetJointMaxStepSize</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the maximum step size of a joint.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetJointMaxStepSize(int jointHandle,simReal* maxStepSize)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>maxStepSize</strong>: the maximum step size, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetJointMaxStepSize">ikSetJointMaxStepSize</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetJointMode" id="ikGetJointMode"></a>ikGetJointMode</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the joint mode.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetJointMode(int jointHandle,int* mode)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>mode</strong>: the joint mode, in return. Possible values are: ik_jointmode_passive, ik_jointmode_ik, ik_jointmode_dependent, ik_jointmode_force</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">

<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetJointMode">ikSetJointMode</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetJointPosition" id="ikGetJointPosition"></a>ikGetJointPosition</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the position (linear or angular) of a joint.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetJointPosition(int jointHandle,simReal* position)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>position</strong>: the position, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetJointPosition">ikSetJointPosition</a>, <a href="#ikGetJointMatrix">ikGetJointMatrix</a>, <a href="#ikGetJointTransformation">ikGetJointTransformation</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetJointScrewPitch" id="ikGetJointScrewPitch"></a>ikGetJointScrewPitch</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the screw pitch of a revolute joint.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetJointScrewPitch(int jointHandle,simReal* pitch)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>pitch</strong>: the screw pitch of the joint, in return. A pitch value of zero represents a revolute joint, a value different from zero represents a screw.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetJointScrewPitch">ikSetJointScrewPitch</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetJointTransformation" id="ikGetJointTransformation"></a>ikGetJointTransformation</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the intrinsic transformation of a joint.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetJointTransformation(int jointHandle,C7Vector* transf)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>transf</strong>: the transformation, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetSphericalJointQuaternion">ikSetSphericalJointQuaternion</a>, <a href="#ikGetJointPosition">ikGetJointPosition</a>, <a href="#ikGetJointMatrix">ikGetJointMatrix</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetJointType" id="ikGetJointType"></a>ikGetJointType</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the joint type.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetJointType(int jointHandle,int* jointType)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>jointType</strong>: the joint type, in return. Possible values are: ik_jointtype_revolute, ik_jointtype_prismatic and ik_jointtype_spherical.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">

<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikCreateJoint">ikCreateJoint</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetLastError" id="ikGetLastError"></a>ikGetLastError</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves and clears the last error string.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">std::string ikGetLastError()</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">The error string.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetLinkedDummy" id="ikGetLinkedDummy"></a>ikGetLinkedDummy</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the handle of a dummy linked to this one.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetLinkedDummy(int dummyHandle,int* linkedDummyHandle)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>dummyHandle</strong>: the handle of the dummy object.</div>
<div><strong>linkedDummyHandle</strong>: the handle of the linked dummy object, in return. Is -1 if no dummy object is linked to this one.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetLinkedDummy">ikSetLinkedDummy</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetManipulability" id="ikGetManipulability"></a>ikGetManipulability</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the manipulability value ( sqrt(det(J*JT)) ) of the Jacobian previously computed via <a href="#ikComputeJacobian">ikComputeJacobian</a>.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetManipulability(int ikGroupHandle,simReal* manip)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>manip</strong>: the manipulability value, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikComputeJacobian">ikComputeJacobian</a>, <a href="#ikGetJacobian">ikGetJacobian</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetObjectHandle" id="ikGetObjectHandle"></a>ikGetObjectHandle</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the handle of an object based on its name.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetObjectHandle(const char* objectName,int* objectHandle)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>objectName</strong>: the name of the object.</div>
<div><strong>objectHandle</strong>: the returned object handle.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikDoesObjectExist">ikDoesObjectExist</a>, <a href="#ikCreateDummy">ikCreateDummy</a>, <a href="#ikCreateJoint">ikCreateJoint</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetObjectMatrix" id="ikGetObjectMatrix"></a>ikGetObjectMatrix</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the transformation matrix of an object. If the object is a joint object, the matrix does not include the joint's intrinsic transformation.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetObjectMatrix(int objectHandle,int relativeToObjectHandle,C4X4Matrix* matrix)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>objectHandle</strong>: the handle of the object.</div>
<div><strong>relativeToObjectHandle</strong>: the handle of an object relative to which we want the matrix expressed. Otherwise, specify -1 if you want the absolute matrix, or ik_handle_parent if you want the matrix relative to the parent object.</div>
<div><strong>matrix</strong>: a pointer to 12 values representing the transformation matrix (the last row of the 4x4 matrix (0,0,0,1) is omitted)</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetObjectMatrix">ikSetObjectMatrix</a>, <a href="#ikGetObjectTransformation">ikGetObjectTransformation</a>, <a href="#ikGetJointTransformation">ikGetJointTransformation</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetObjectParent" id="ikGetObjectParent"></a>ikGetObjectParent</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves an object's parent handle.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetObjectParent(int objectHandle,int* parentObjectHandle)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>objectHandle</strong>: the handle of the object.</div>
<div><strong>parentObjectHandle</strong>: the returned handle of the parent, or -1 if the object has no parent.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetObjectParent">ikSetObjectParent</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetObjects" id="ikGetObjects"></a>ikGetObjects</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Allows to loop through all objects in the environment.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetObjects(size_t index,int* objectHandle=nullptr,std::string* objectName=nullptr,bool* isJoint=nullptr,int* jointType=nullptr)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>index</strong>: the zero-based index. Start at 0, and increment until the return value is false, in order to loop through all objects in the environment.</div>
<div><strong>objectHandle</strong>: the handle of the object, in return.</div>
<div><strong>objectName</strong>: the name of the object, in return.</div>
<div><strong>isJoint</strong>: whether the object is a joint, in return.</div>
<div><strong>jointType</strong>: the type of joint, in return, if the object at the specified index is a joint. Possible values are ik_jointtype_revolute, ik_jointtype_prismatic or ik_jointtype_spherical.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">false in case of an error, or if no object exists at the specified index.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetObjectHandle">ikGetObjectHandle</a>, <a href="#ikDoesObjectExist">ikDoesObjectExist</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetObjectTransformation" id="ikGetObjectTransformation"></a>ikGetObjectTransformation</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the transformation (position and quaternion) of an object. If the object is a joint object, the transformation does not include the joint's intrinsic transformation.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetObjectTransformation(int objectHandle,int relativeToObjectHandle,C7Vector* transf)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>objectHandle</strong>: the handle of the object.</div>
<div><strong>relativeToObjectHandle</strong>: the handle of an object relative to which we want the transformation expressed. Otherwise, specify -1 if you want the absolute transformation, or ik_handle_parent if you want the transformation relative to the parent object.</div>
<div><strong>transf</strong>: a pointer to the transformation that will be returned.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetObjectTransformation">ikSetObjectTransformation</a>, <a href="#ikGetObjectMatrix">ikGetObjectMatrix</a>, <a href="#ikGetJointTransformation">ikGetJointTransformation</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikHandleIkGroup" id="ikHandleIkGroup"></a>ikHandleIkGroup</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Handles (i.e. computes/resolves) an IK group.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikHandleIkGroup(int ikGroupHandle=ik_handle_all,int* result=nullptr)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group (in that case make sure the IK group is flagged as explicit handling (default when creating a new IK group)), or ik_handle_all to handle all IK groups.</div>
<div><strong>result</strong>: the resolution result, in return. Possible values are ik_result_not_performed, ik_result_success, ik_result_fail</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikComputeJacobian">ikComputeJacobian</a>, <a href="#ikGetConfigForTipPose">ikGetConfigForTipPose</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikLoad" id="ikLoad"></a>ikLoad</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Loads kinematic content previously exported with <a href="#ikSave">ikSave</a>. Make sure that the environment is empty before calling this function.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikLoad(const unsigned char* data,size_t dataLength)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>data</strong>: a pointer to a buffer with the kinematic content.</div>
<div><strong>dataLength</strong>: the size of the kinematic content buffer.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSave">ikSave</a>, <a href="#ikCreateEnvironment">ikCreateEnvironment</a>, <a href="#ikEraseEnvironment">ikEraseEnvironment</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikReleaseBuffer" id="ikReleaseBuffer"></a>ikReleaseBuffer</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Releases a buffer allocated by the specific API functions.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">void ikReleaseBuffer(void* buffer)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>buffer</strong>: the buffer to release.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet"></td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSave" id="ikSave"></a>ikSave</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Saves the kinematic content in the current environment.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">unsigned char* ikSave(size_t* dataLength)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>dataLength</strong>: the size of the kinematic content buffer.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">a pointer to a buffer with the kinematic content. The user is in charge of releasing the buffer with <a href="#ikReleaseBuffer">ikReleaseBuffer</a></td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikLoad">ikLoad</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetIkElementBase" id="ikSetIkElementBase"></a>ikSetIkElementBase</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the base object of an IK element.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetIkElementBase(int ikGroupHandle,int ikElementHandle,int baseHandle,int constraintsBaseHandle=-1)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>ikElementHandle</strong>: the IK element handle, or X, where X=handleOfTipDummy|ik_handleflag_tipdummy (if several IK elements with the same tip dummy exist, then the first encountered will be selected).</div>
<div><strong>baseHandle</strong>: the handle of the base object, or -1 if the world is the base.</div>
<div><strong>constraintsBaseHandle</strong>: the handle of the constraints base object, relative to which the constraints are specified. Set to -1 to have the constraints relative to the base object.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetIkElementBase">ikGetIkElementBase</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetIkElementConstraints" id="ikSetIkElementConstraints"></a>ikSetIkElementConstraints</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the constraints of an IK element.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetIkElementConstraints(int ikGroupHandle,int ikElementHandle,int constraints)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>ikElementHandle</strong>: the IK element handle, or X, where X=handleOfTipDummy|ik_handleflag_tipdummy (if several IK elements with the same tip dummy exist, then the first encountered will be selected).</div>
<div><strong>constraints</strong>: the constraints. Combine following: ik_constraint_x, ik_constraint_y, ik_constraint_z, ik_constraint_alpha_beta, ik_constraint_gamma (ik_constraint_gamma should only be set if ik_constraint_alpha_beta is also set). For convenience we also have ik_constraint_position=ik_constraint_x|ik_constraint_y|ik_constraint_z, ik_constraint_orientation=ik_constraint_alpha_beta|ik_constraint_gamma, and ik_constraint_pose=ik_constraint_position|ik_constraint_orientation.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetIkElementConstraints">ikGetIkElementConstraints</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetIkElementFlags" id="ikSetIkElementFlags"></a>ikSetIkElementFlags</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets various flags for an IK element.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetIkElementFlags(int ikGroupHandle,int ikElementHandle,int flags)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>ikElementHandle</strong>: the IK element handle, or X, where X=handleOfTipDummy|ik_handleflag_tipdummy (if several IK elements with the same tip dummy exist, then the first encountered will be selected).</div>
<div><strong>flags</strong>: bit-coded flags: bit0 set (1): the enabled state of the ik element.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetIkElementFlags">ikGetIkElementFlags</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetIkElementPrecision" id="ikSetIkElementPrecision"></a>ikSetIkElementPrecision</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the desired precision of an IK element.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetIkElementPrecision(int ikGroupHandle,int ikElementHandle,simReal linearPrecision,simReal angularPrecision)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>ikElementHandle</strong>: the IK element handle, or X, where X=handleOfTipDummy|ik_handleflag_tipdummy (if several IK elements with the same tip dummy exist, then the first encountered will be selected).</div>
<div><strong>linearPrecision</strong>: the required linear precision.</div>
<div><strong>angularPrecision</strong>: the required angular precision.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetIkElementPrecision">ikGetIkElementPrecision</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetIkElementWeights" id="ikSetIkElementWeights"></a>ikSetIkElementWeights</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the desired linear and angular resolution weights of an IK element.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetIkElementWeights(int ikGroupHandle,int ikElementHandle,simReal linearWeight,simReal angularWeight)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>ikElementHandle</strong>: the IK element handle, or X, where X=handleOfTipDummy|ik_handleflag_tipdummy (if several IK elements with the same tip dummy exist, then the first encountered will be selected).</div>
<div><strong>linearWeight</strong>: the desired linear resolution weight.</div>
<div><strong>angularWeight</strong>: the desired angular resolution weight.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetIkElementWeights">ikGetIkElementWeights</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetIkGroupCalculation" id="ikSetIkGroupCalculation"></a>ikSetIkGroupCalculation</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets calculation properties for an IK group.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetIkGroupCalculation(int ikGroupHandle,int method,simReal damping,int maxIterations)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>method</strong>: the resolution method. Possible values are ik_method_pseudo_inverse (features a tiny bit of hard-coded damping), ik_method_undamped_pseudo_inverse, ik_method_damped_least_squares and ik_method_jacobian_transpose.</div>
<div><strong>damping</strong>: the damping, in case the resolution method is ik_method_damped_least_squares.</div>
<div><strong>maxIterations</strong>: the maximum number of iterations.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetIkGroupCalculation">ikGetIkGroupCalculation</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetIkGroupFlags" id="ikSetIkGroupFlags"></a>ikSetIkGroupFlags</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets flags of an IK group.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetIkGroupFlags(int ikGroupHandle,int flags)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>flags</strong>: the flags of the IK group. bit0 set (i.e. 1)=group is enabled, bit1 set (i.e. 2)=max. step sizes are ignored, bit2 set (i.e. 4)=restore joints if target position not reached, bit3 set (i.e. 8)=restore joints if target orientation not reached.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetIkGroupFlags">ikGetIkGroupFlags</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetJointDependency" id="ikSetJointDependency"></a>ikSetJointDependency</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets information about a possible dependent joint.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetJointDependency(int jointHandle,int dependencyJointHandle,simReal offset=0.0,simReal mult=1.0)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>dependencyJointHandle</strong>: the handle of the joint, this joint is dependent of. -1 to disable.</div>
<div><strong>offset</strong>: the offset. We have joint position = dependency joint position * mult + offset</div>
<div><strong>mult</strong>: the multiplication factor. We have joint position = dependency joint position * mult + offset</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetJointDependency">ikGetJointDependency</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetJointIkWeight" id="ikSetJointIkWeight"></a>ikSetJointIkWeight</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the IK weight of a joint, i.e. the weight it has during IK resolution.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetJointIkWeight(int jointHandle,simReal ikWeight)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>ikWeight</strong>: the IK weight.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetJointIkWeight">ikGetJointIkWeight</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetJointInterval" id="ikSetJointInterval"></a>ikSetJointInterval</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the joint limits.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetJointInterval(int jointHandle,bool cyclic,const simReal* intervalMinAndRange=nullptr)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>cyclic</strong>: whether the joint is cyclic (has no limits). Only revolute joints can be cyclic.</div>
<div><strong>intervalMinAndRange</strong>: a pointer to two values: the joint lower limit, and the joint range (i.e. joint upper limit = joint lower limit + joint range)</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetJointInterval">ikGetJointInterval</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetJointMaxStepSize" id="ikSetJointMaxStepSize"></a>ikSetJointMaxStepSize</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the maximum step size of a joint.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetJointMaxStepSize(int jointHandle,simReal maxStepSize)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>maxStepSize</strong>: the maximum step size.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetJointMaxStepSize">ikGetJointMaxStepSize</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetJointMode" id="ikSetJointMode"></a>ikSetJointMode</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the joint mode.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetJointMode(int jointHandle,int jointMode)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>jointMode</strong>: the joint mode. Allowed values are: ik_jointmode_passive, ik_jointmode_ik, ik_jointmode_dependent</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetJointMode">ikGetJointMode</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetJointPosition" id="ikSetJointPosition"></a>ikSetJointPosition</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the position (linear or angular) of a joint.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetJointPosition(int jointHandle,simReal position)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>position</strong>: the position.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetJointPosition">ikGetJointPosition</a>, <a href="#ikSetSphericalJointMatrix">ikSetSphericalJointMatrix</a>, <a href="#ikSetSphericalJointQuaternion">ikSetSphericalJointQuaternion</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetJointScrewPitch" id="ikSetJointScrewPitch"></a>ikSetJointScrewPitch</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the screw pitch, in case of a revolute joint.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetJointScrewPitch(int jointHandle,simReal pitch)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>pitch</strong>: the screw pitch of the joint. A pitch value of zero represents a revolute joint, a value different from zero represents a screw.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetJointScrewPitch">ikGetJointScrewPitch</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetLinkedDummy" id="ikSetLinkedDummy"></a>ikSetLinkedDummy</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Links this dummy object to another dummy object, or detaches it from another dummy object.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetLinkedDummy(int dummyHandle,int linkedDummyHandle)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>dummyHandle</strong>: the handle of the dummy object.</div>
<div><strong>linkedDummyHandle</strong>: the handle of the dummy object to be linked, or -1 to detach this dummy object from a linked dummy object.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetLinkedDummy">ikGetLinkedDummy</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetObjectMatrix" id="ikSetObjectMatrix"></a>ikSetObjectMatrix</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the transformation matrix of an object. If the object is a joint object, the matrix does not include the joint's intrinsic transformation.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetObjectMatrix(int objectHandle,int relativeToObjectHandle,const C4X4Matrix* matrix)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>objectHandle</strong>: the handle of the object.</div>
<div><strong>relativeToObjectHandle</strong>: the handle of an object relative to which the matrix is expressed. Otherwise, specify -1 if you specify the absolute matrix, or ik_handle_parent if you specify the matrix relative to the parent object.</div>
<div><strong>matrix</strong>: the transformation matrix</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetObjectMatrix">ikGetObjectMatrix</a>, <a href="#ikSetObjectTransformation">ikSetObjectTransformation</a>, <a href="#ikSetJointPosition">ikSetJointPosition</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetObjectParent" id="ikSetObjectParent"></a>ikSetObjectParent</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the parent of an object.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetObjectParent(int objectHandle,int parentObjectHandle,bool keepInPlace)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>objectHandle</strong>: the handle of the object.</div>
<div><strong>parentObjectHandle</strong>: the desired parent object, Set -1 for no parent.</div>
<div><strong>keepInPlace</strong>: if true, the object will stay in place, otherwise, it will keep its local transformation.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetObjectParent">ikGetObjectParent</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetObjectTransformation" id="ikSetObjectTransformation"></a>ikSetObjectTransformation</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the transformation (position and quaternion) of an object. If the object is a joint object, the transformation does not include the joint's intrinsic transformation.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetObjectTransformation(int objectHandle,int relativeToObjectHandle,const C7Vector* transf)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>objectHandle</strong>: the handle of the object.</div>
<div><strong>relativeToObjectHandle</strong>: the handle of an object relative to which the transformation is expressed. Otherwise, specify -1 if you specify the absolute transformation, or ik_handle_parent if you specify the transformation relative to the parent object.</div>
<div><strong>transf</strong>: the transformation.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetObjectTransformation">ikGetObjectTransformation</a>, <a href="#ikSetObjectMatrix">ikSetObjectMatrix</a>, <a href="#ikSetJointPosition">ikSetJointPosition</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetSphericalJointMatrix" id="ikSetSphericalJointMatrix"></a>ikSetSphericalJointMatrix</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the rotation transformation matrix of a spherical joint.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetSphericalJointMatrix(int jointHandle,const C3X3Matrix* rotMatrix)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>rotMatrix</strong>: the rotation transformation matrix to apply.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetJointMatrix">ikGetJointMatrix</a>, <a href="#ikSetJointPosition">ikSetJointPosition</a>, <a href="#ikSetSphericalJointQuaternion">ikSetSphericalJointQuaternion</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetSphericalJointQuaternion" id="ikSetSphericalJointQuaternion"></a>ikSetSphericalJointQuaternion</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the rotation transformation of a spherical joint.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetSphericalJointQuaternion(int jointHandle,const C4Vector* quaternion)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>quaternion</strong>: the rotation transformation to apply.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetJointTransformation">ikGetJointTransformation</a>, <a href="#ikSetSphericalJointMatrix">ikSetSphericalJointMatrix</a>, <a href="#ikSetJointPosition">ikSetJointPosition</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSwitchEnvironment" id="ikSwitchEnvironment"></a>ikSwitchEnvironment</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Switches to another environment and all function calls will be directed to that environment.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSwitchEnvironment(int handle,bool allowAlsoProtectedEnvironment=false)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>handle</strong>: handle of the environment to switch to.</div>
<div><strong>allowAlsoProtectedEnvironment</strong>: set to false.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikCreateEnvironment">ikCreateEnvironment</a>, <a href="#ikEraseEnvironment">ikEraseEnvironment</a></td>
</tr>
</table>
<br>

</td></tr>
</table></div>
<script type="text/javascript">
//
view = getParameterByName('view')
document.getElementById('alphabetical').style.display = view == 'alphabetical' ? 'table-cell' : 'none'
document.getElementById('category').style.display = view == 'category' ? 'table-cell' : 'none'
document.getElementById('commands').style.display = view == null ? 'table-cell' : 'none'
document.getElementById('enums').style.display = view == null ? 'table-cell' : 'none'
document.getElementById('structs').style.display = view == null ? 'table-cell' : 'none'
document.getElementById('scriptFunctions').style.display = view == null ? 'table-cell' : 'none'
//
                </script>
</body>
</html>
